package 排序; // 定义包名为“排序”
import java.util.*; // 导入java工具包

public class findUnsortedSubarray { // 定义类，用于查找未排序子数组
    public int findUnsorted(int[] nums){ // 方法用于查找未排序子数组的长度
        int[] copy = new int[nums.length]; // 创建一个数组用于存储原始数组的副本
        for(int i = 0; i < nums.length; i++) // 遍历原始数组
            copy[i] = nums[i]; // 将原始数组的元素复制到副本中
        // Arrays.sort(copy); // 使用Java内置排序
        quickSort(copy, 0, copy.length - 1); // 对副本进行快速排序
        int left = 0; // 初始化左边界
        int right = nums.length - 1; // 初始化右边界
        while(left <= right && nums[left] == copy[left]) // 从左向右查找第一个不匹配的元素
            left++; // 左边界递增
        while(left <= right && nums[right] == copy[right]) // 从右向左查找第一个不匹配的元素
            right--; // 右边界递减
        return right - left + 1; // 返回未排序子数组的长度
    }

    private void quickSort(int[] nums, int left, int right){ // 快速排序算法
        if(left >= right) return; // 如果左边界大于等于右边界，返回
        int pivot = partition(nums, left, right); // 获取基准元素的位置
        quickSort(nums, left, pivot - 1); // 递归排序左半部分
        quickSort(nums, pivot + 1, right); // 递归排序右半部分
    }

    private int partition(int[] nums, int left, int right){ // 分区函数，用于快速排序
        int val = nums[left]; // 选择第一个元素作为基准
        while(left < right){ // 当左边界小于右边界时继续循环
            while(left < right && nums[right] >= val) right--; // 从右向左找小于基准的元素
            nums[left] = nums[right]; // 将小于基准的元素放到左边
            while(left < right && nums[left] <= val) left++; // 从左向右找大于基准的元素
            nums[right] = nums[left]; // 将大于基准的元素放到右边
        }
        nums[left] = val; // 将基准元素放到最终位置
        return left; // 返回基准元素的位置
    }

    public static void main(String[] args) { // 主方法，处理输入并输出结果
        Scanner sc = new Scanner(System.in); // 创建扫描器对象
        String[] s = sc.nextLine().split(","); // 读取输入并分割
        int[] nums = new int[s.length]; // 创建数组用于存储输入的元素
        for(int i = 0; i < nums.length; i++){ // 遍历输入的元素
            nums[i] = Integer.parseInt(s[i]); // 将字符串转换为整数
        }
        findUnsortedSubarray fus = new findUnsortedSubarray(); // 创建对象
        System.out.println(fus.findUnsorted(nums)); // 输出结果
        sc.close(); // 关闭扫描器
    }
}
